/*
 *https://leetcode.cn/problems/koko-eating-bananas/
 *875. 爱吃香蕉的珂珂
 *medium 吴朝泽 2024.9.12
 *二分查找
左边界为 1 ，右边界为 vector 数组中最大元素的位置。
计算以 mid 的速度吃完所有香蕉要多少小时，与 h 作比较
特别注意在算 ans 的时候，要向上取整，例如 7 / 3 向下取整是 2 小时，而实际需要 3 小时，
加上 mid - 1 是为了确保任何非整除的情况都能向上取整。
*/

class Solution {
public:
    int minEatingSpeed(vector<int>& piles, int h) {
        int l = 1, r = *max_element(piles.begin(),piles.end());
        while(l <= r)
        {
            int mid = (l + r) / 2;
            long long ans = 0;
            for(int x : piles)   ans += (x + mid - 1) / mid;
            if(ans <= h)   r = mid - 1;
            else  l = mid + 1;
        }
        return l;
    }
};